use reqwest::header::{HeaderMap, HeaderValue, AUTHORIZATION, CONTENT_TYPE};
use once_cell::sync::Lazy; // 引入 once_cell
use serde_json::Value;
use anyhow::{Result, anyhow, Context}; // 关键：导入 Context trait
use crate::utils::http_utils;

pub const COZE_HOST: &str = "https://api.coze.cn";





pub async fn bots(token: &str,workspace_id: &str)-> Result<Value, anyhow::Error>{
    let way:&str = "get";
    let url:String = COZE_HOST.to_string() + "/v1/bots?" + "workspace_id=" + workspace_id;
    let access_token: String = "Bearer ".to_string() + token;
    let headers = with_auth_headers(&access_token);
    let result = http_utils::request_json(way, &url, headers, None).await;
    return result;
}


/// 基础 JSON 请求头：包含 Content-Type: application/json
/// 使用 Lazy 实现运行时初始化（支持非 const 方法）
pub static BASE_JSON_HEADERS: Lazy<HeaderMap> = Lazy::new(|| {
    let mut headers = HeaderMap::new();
    // 设置 Content-Type 为 JSON
    headers.insert(
        CONTENT_TYPE,
        HeaderValue::from_static("application/json"),
    );
    headers
});

/// 创建包含认证信息的 JSON 请求头
/// - token: 认证令牌（如 "Bearer xxx"）
pub fn with_auth_headers(token: &str) -> HeaderMap {
    let mut headers = BASE_JSON_HEADERS.clone(); // 克隆基础头
    // 添加 Authorization 头（处理可能的错误）
    if let Ok(auth_value) = HeaderValue::from_str(token) {
        headers.insert(AUTHORIZATION, auth_value);
    } else {
        panic!("无效的 token 格式: {}", token); // 实际项目中可返回 Result
    }
    headers
}